package outils.chemin;

/**
 *
 * @author nicolas
 */
import java.util.ArrayList;
import java.util.Collections;

/**
 *
 * @param <T>
 * @param <U>
 */
public class Fap<T, U extends Comparable> {

	private ArrayList<PairePoidsValeur<T, U>> valeurs;

	/**
	 * Crée une file à priorité
	 */
	public Fap() {
		valeurs = new ArrayList<PairePoidsValeur<T, U>>();
	}

	/**
	 *
	 * @return l'élément de poids le plus faible
	 */
	public PairePoidsValeur<T, U> extraire() {
		PairePoidsValeur<T, U> ppv = valeurs.get(0);
		valeurs.remove(0);
		return ppv;
	}

	/**
	 * Insére un élement de valeur 'valeur' et de poids 'poids' dans la file à
	 * priorité
	 *
	 * @param valeur
	 * @param poids
	 */
	public void inserer(T valeur, U poids) {
		PairePoidsValeur<T, U> ppv = new PairePoidsValeur<T, U>();
		ppv.poids = poids;
		ppv.valeur = valeur;
		valeurs.add(ppv);
		Collections.sort(valeurs);
	}

	/**
	 *
	 * @param valeur
	 * @return vrai si la file à priorité contient un élément de valeur
	 * 'valeur', faux sinon
	 */
	public boolean contient(T valeur) {
		PairePoidsValeur ppv = new PairePoidsValeur<T, U>();
		ppv.valeur = valeur;
		return valeurs.contains(ppv);
	}

	/**
	 *
	 * @return vrai si la file à priorité est vide, faux sinon
	 */
	public boolean estVide() {
		return valeurs.isEmpty();
	}
}
